//
//  Date+.swift
//  shanshanlol微博
//
//  Created by 叶竞泽 on 2017/2/14.
//  Copyright © 2017年 JingZe. All rights reserved.
//

import Foundation

/// 日期格式化器 - 不要频繁的释放和创建,否则会影响性能
private let dateFormatter = DateFormatter()

/// 当前的日历对象
private let calendar = Calendar.current

extension Date {
    
    /// 计算与当前系统时间偏差秒数的日期字符串
    ///
    /// - Parameter withDate: 给定的秒数
    /// - Returns: 日期字符串
    /// - 在swift中,如果要定义结构体的类函数,使用static,不使用class
    static func ss_dateString(withDate: TimeInterval) -> String {
        
        let date = Date(timeIntervalSinceNow: withDate)
        
        // 指定日期格式
        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        
        return dateFormatter.string(from: date)
    }
    
    /// 将新浪服务器返回的日期字符串转换成日期
    ///
    /// - Parameter withString: 新浪返回的日期字符串
    /// - Returns: 转换后的日期
    static func ss_sinaDate(withString: String) -> Date? {
        
        // 设置日期格式
        dateFormatter.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
        
        // 转换字符串
        return dateFormatter.date(from: withString)
    }
    
    /**
     刚刚(1分钟内)
     X分钟前(一小时内)
     X小时前(今天)
     昨天 HH:mm:ss (昨天)
     MM-dd HH:ss (一年内)
     yyyy-MM-dd HH:mm (更早)
     */
    var dateDescription: String {
        
        // 1.判断日期是否是今天
        if calendar.isDateInToday(self) {
            
            let delta = -Int(self.timeIntervalSinceNow)
            
            if delta < 60 {
                return "刚刚"
            }
            if delta < (60 * 60) {
                return "\(delta / 60)分钟前"
            }
        
            return "\(delta / 3600)小时前"
            
        }
        
        var fmt = "HH:mm"
        
        // 2.判断是否是昨天
        if calendar.isDateInYesterday(self) {
            fmt = "昨天" + fmt
        } else {
            fmt = "MM-dd" + fmt
            let year = calendar.component(.year, from: self)
            let thisYear = calendar.component(.year, from: Date())
            if year != thisYear {
                fmt = "yyyy-" + fmt
            }
        }
        
        dateFormatter.dateFormat = fmt
        
        return dateFormatter.string(from: self)
        
    }
}
